#ifndef RS_ALGO_COMMON_H
#define RS_ALGO_COMMON_H

#define RS_OK                             0

#define RS_ERR_COMMON_BASE                1000
#define RS_ERR_INVALID_PARAMS             (RS_ERR_COMMON_BASE+1)
#define RS_ERR_NO_MEMORY                  (RS_ERR_COMMON_BASE+2)
#define RS_ERR_INTERNAL                   (RS_ERR_COMMON_BASE+3)
#define RS_ERR_RUN_LOCK                   (RS_ERR_COMMON_BASE+4) /* 多个线程同时访问句柄导致获取锁异常 */
#define RS_ERR_NOT_INITIAL                (RS_ERR_COMMON_BASE+5) /* 模块未初始化 */
#define RS_ERR_INVALID_HANDLE             (RS_ERR_COMMON_BASE+6) /* 句柄无效 */

typedef void* RSContext;

typedef struct tag_RSPoint
{
    int x;
    int y;
} RSPoint;

typedef struct tag_RSSize
{
    int width;
    int height;
} RSSize;

typedef struct tag_RSRect
{
    int x;
    int y;
    int width;
    int height;
} RSRect;

typedef enum tag_RSImgFormat
{
    RS_IMG_FORMAT_GRAY = 0,                  /* 图像灰度格式 */
    RS_IMG_FORMAT_NV12,                      /* 图像NV12格式 */
    RS_IMG_FORMAT_NV21,                      /* 图像NV21格式 */
    RS_IMG_FORMAT_I420,                      /* 图像I420格式 */
    RS_IMG_FORMAT_YV12,                      /* 图像YV12格式 */
    RS_IMG_FORMAT_BGR888_PACKED,             /* 图像BGR888打包格式 */
    RS_IMG_FORMAT_BGR888_PLANAR,             /* 图像BGR888平面格式 */
} RSImgFormat;

typedef struct tag_RSImage
{
    int width;                               /* 图像宽度 */
    int height;                              /* 图像高度 */
    RSImgFormat format;                      /* 图像格式 */
    unsigned char* data;                     /* 图像数据 */
} RSImage;

typedef struct tag_RSExtImage
{
    int width;
    int height;
    unsigned char *data;
    unsigned char *extData;
} RSExtImage;

#endif
